package com.study;

import java.util.Arrays;

/**
 * @program: leetcode
 * @author: jzhou
 * @date: 2022-11-12 13:34
 * @version: 1.0
 * @description: 三个数的最大乘积
 * 整形数组，数组中找出三个数字组成的最大乘积
 * 有三种情况：1、三个数都是整数，则找最大三个数字即可
 *           2、三个数都是负数，则要找三个最小的负数
 *           3、若两负一正，找最小的两个负数和最大的整数相乘
 *           4、两正一负，找最大的负数和最小的整数相乘
 *
 * 主要考点：线性扫描
 **/
public class MaxProduct {

    public static void main(String[] args) {
        int[] arr = {1,4,10,3,-1,9};
        int max = getMax(arr);
        System.out.println(max);
    }

    private static int getMax(int[] arr) {
        // 定义两个最小数
        int min1 = Integer.MAX_VALUE,min2 = Integer.MAX_VALUE;
        int max1 = Integer.MIN_VALUE,max2 = Integer.MIN_VALUE,max3 = Integer.MIN_VALUE;
        for (int num : arr) {
            //找最小值
            if(num < min1){
                min2 = min1;
                min1 = num;
            }else if(num < min2){
                min2 = num;
            }
            // 找最大值
            if (num > max1){
                max3 = max2;
                max2 = max1;
                max1 = num;
            }else if (num > max2){
                max3 = max2;
                max2 = num;
            }else if(num > max3){
                max3 = num;
            }
        }

        return Math.max(min1 * min2 * max1,max1 * max2 * max3);
    }


    /**
     *  字符串中第二大的数字,如果不存在第二大的数字，请你返回 -1 。
     * @param s
     * @return
     */
    public static int secondHighest(String s) {

        int first = -1,second = -1; // 第一大 和 第二大
        for (char c : s.toCharArray()) {
            if (Character.isDigit(c)) {
                int num = (c - '0');
                if (num > first){
                    second = first;
                    first = num;
                }else if(num > second && num < first){
                    second = num;
                }
            }
        }

        return second;
    }

}
